package ArrayList_;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;

/*
 *@Student 张策
 */
public class MyArrayList implements IList_{
    public int[]elem;
    public int useUser;
    public static final int DEFAULT_CAPACITY=10;
    public MyArrayList(){
        elem=new int[DEFAULT_CAPACITY];
    }

    @Override
    public void add(int data) {
        Copy();
        elem[useUser]=data;
        useUser++;
    }

    @Override
    public void add(int pos, int data) {
        checkPosAdd(pos);
        Copy();
        for (int i = useUser-1; i >=pos ; i--) {
            elem[i+1]=elem[i];
        }
        elem[pos]=data;
        useUser++;
    }
    private void checkPosAdd(int pos){
        if(pos<0||pos>useUser){
            throw new PosExeption_("pos位置不合法");
        }
    }
    private void checkPosGet(int pos){
        if(pos<0||pos>=useUser){
            throw new PosExeption_("pos位置不合法");
        }
    }
    private void Copy(){
        if(isFull()){
            elem= Arrays.copyOf(elem,2*elem.length);
        }
    }
    @Override
    public boolean contains(int toFind) {
        for (int i = 0; i < useUser; i++) {
            if(elem[i]==toFind){
                return true;
            }
        }
        return false;
    }

    @Override
    public int indexOf(int toFind) {
        for (int i = 0; i < useUser; i++) {
            if (elem[i]==toFind){
                return i;
            }
        }
        return -1;
    }

    @Override
    public int get(int pos) {
        //是否合法
        checkPosGet(pos);
        //为空
        if (isEmty()){
            throw new  EmptyException("顺序表为空");
        }
        return elem[pos];
    }
    public boolean isEmty(){
        return useUser==0;
    }

    @Override
    public void set(int pos, int value) {
        checkPosGet(pos);
        elem[pos]=value;
    }

    @Override
    public void remove(int toRemove) {
        if(isEmty()){
            throw new EmptyException("为空不能删除");
        }
        int index=indexOf(toRemove);
        for (int j = index; j <useUser-1 ; j++) {
            elem[j]=elem[j+1];
        }
        useUser--;
    }

    @Override
    public int size() {
        return this.useUser;
    }

    @Override
    public void clear() {
        for (int i = 0; i < useUser; i++) {
            elem[i]=0;
        }
    }

    @Override
    public void display() {
        for (int i = 0; i < useUser; i++) {
            System.out.println(elem[i]);
        }
    }
    public boolean isFull(){
        return useUser==elem.length;
    }
}
/*
boolean add(E e) 尾插 e
void add(int index, E element) 将 e 插入到 index 位置
boolean addAll(Collection<? extends E> c) 尾插 c 中的元素
E remove(int index) 删除 index 位置元素
boolean remove(Object o) 删除遇到的第一个 o
E get(int index) 获取下标 index 位置元素
E set(int index, E element) 将下标 index 位置元素设置为 element
void clear() 清空
boolean contains(Object o) 判断 o 是否在线性表中
int indexOf(Object o) 返回第一个 o 所在下标
int lastIndexOf(Object o) 返回最后一个 o 的下标
List<E> subList(int fromIndex, int toIndex) 截取部分 list
 */
